home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-03-26 | 53.3 KB | 2,335 lines |
- ---- Cut Here and feed the following to sh ----
- #!/bin/sh
- # This is part 03 of a multipart archive
- # ============= Gopher.cc ==============
- if test -f 'Gopher.cc' -a X"$1" != X"-c"; then
- echo 'x - skipping Gopher.cc (File already exists)'
- else
- echo 'x - extracting Gopher.cc (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'Gopher.cc' &&
- //
- // Gopher.cc
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // Implementation of the Gopher class
- //
- #include "Gopher.h"
- #include "String.h"
- #include "Connection.h"
- #include "GWindow.h"
- #include "Response.h"
- #include <unistd.h>
- #include <stdio.h>
- #include <xview/notify.h>
- #include <fcntl.h>
- #include <time.h>
- X
- #define LINE_COUNT_INCREMENT 20
- #define MAX_LIST_LINES 1023
- X
- X
- //***************************************************************************
- // Gopher::Gopher(GWindow *gwin)
- //
- Gopher::Gopher(GWindow *gwin)
- {
- X fd = -1;
- X gwindow = gwin;
- X *filename = '\0';
- X connection = (Connection *) 0;
- }
- X
- X
- //***************************************************************************
- // Gopher::~Gopher()
- //
- Gopher::~Gopher()
- {
- X if (connection->isopen())
- X (void) notify_set_input_func((Notify_client) this, NOTIFY_FUNC_NULL, connection->get_socket());
- X fd = -1;
- X if (*filename)
- X unlink(filename);
- X if (connection)
- X delete connection;
- }
- X
- X
- //***************************************************************************
- // Gopher::Gopher(char *server, int port, GWindow *gwin)
- //
- Gopher::Gopher(char *server, int port, GWindow *gwin)
- {
- X fd = -1;
- X gwindow = gwin;
- X *filename = '\0';
- X if (open(server, port) == NOTOK)
- X exit(1);
- }
- X
- X
- //***************************************************************************
- // int Gopher::open(server, port)
- // PURPOSE:
- // Build a connection with the gopher server.
- //
- int Gopher::open(char *server, int port)
- {
- X connection = new Connection;
- X
- X if (connection->open() == NOTOK)
- X return NOTOK;
- X if (connection->assign_port(port) == NOTOK)
- X return NOTOK;
- X if (connection->assign_server(server) == NOTOK)
- X return NOTOK;
- X if (connection->connect() == NOTOK)
- X return NOTOK;
- X
- X return OK;
- }
- X
- X
- //***************************************************************************
- // int Gopher::read(char type, char *cmd)
- // PURPOSE:
- // Send cmd to the server and receive the information until the
- // connection is closed by the server
- //
- int Gopher::read(char type, char *cmd)
- {
- X gwindow->status("Retrieving information...");
- X
- X //
- X // First send the command. We need to terminate the command with
- X // a return. Since we do not know how big cmd is, we will just make
- X // it into two writes.
- X //
- X if (cmd == NULL)
- X cmd = "";
- X connection->write(cmd, strlen(cmd));
- X connection->write("\r\n", 2);
- X
- X //
- X // Now we are ready to receive the information. The type of information
- X // depends on the command we sent to the server, so we will use it
- X // to determine where this information will be stored.
- X //
- X switch (type)
- X {
- X case GOPHER_FILE:
- X //
- X // Plain ASCII file coming through... Save it someplace
- X //
- X read_ascii();
- X break;
- X case GOPHER_DIRECTORY:
- X case '\0':
- X //
- X // We are getting a directory listing. Read it into our List
- X //
- X read_list();
- X break;
- X case GOPHER_CSO:
- X break;
- X case GOPHER_ERROR:
- X break;
- X case GOPHER_UU:
- X break;
- X case GOPHER_INDEX:
- X break;
- X case GOPHER_TELNET:
- X break;
- X case GOPHER_BINHEX:
- X case GOPHER_DOS:
- X case GOPHER_BIN:
- X //
- X // Some binary file coming in. Read until connection closes
- X //
- X read_binary();
- X break;
- X case GOPHER_SOUND:
- X //
- X // Some binary file coming in. Read until connection closes
- X //
- X read_binary();
- X datatype = TYPE_SOUND;
- X break;
- X case GOPHER_IMAGE:
- X case GOPHER_GIF:
- X //
- X // Some binary file coming in. Read until connection closes
- X //
- X read_binary();
- X datatype = TYPE_IMAGE;
- X break;
- X case GOPHER_REDUNDANT:
- X break;
- X default:
- X printf("Hmm. The I don't know how to read data of type '%c'\n", type);
- X break;
- X }
- X return OK;
- }
- X
- X
- //***************************************************************************
- // void Gopher::start_get()
- // PURPOSE:
- // Set up the list of data so we can retrieve data in order
- //
- void Gopher::start_get()
- {
- X list.start_get();
- }
- X
- X
- //***************************************************************************
- // char *Gopher::get_next()
- // PURPOSE:
- // Get the next item from our list
- //
- char *Gopher::get_next()
- {
- X String *str = (String *) list.get_next();
- X
- X if (str)
- X return str->get();
- X else
- X return NULL;
- }
- X
- X
- //***************************************************************************
- // void Gopher::read_list()
- //
- void Gopher::read_list()
- {
- X //
- X // In order not to block on a read, we will use the xview read notify
- X // to tell us when data is actually available.
- X //
- X datatype = TYPE_LIST;
- X length = 0;
- X (void) notify_set_input_func((Notify_client) this, (Notify_func) read_list_proc, connection->get_socket());
- }
- X
- #define INPUT_BUF_SIZE 50000
- X
- //***************************************************************************
- // void Gopher::read_list_proc(Gopher *gopher, int ifd)
- //
- void Gopher::read_list_proc(Gopher *gopher, int ifd)
- {
- X char buffer[INPUT_BUF_SIZE];
- X static time_t last = 0;
- X char *p;
- X
- X if (gopher->connection->read_line(buffer, INPUT_BUF_SIZE) == NULL || gopher->length > MAX_LIST_LINES)
- X {
- X //
- X // End of file reached.
- X //
- X (void) notify_set_input_func((Notify_client) gopher, NOTIFY_FUNC_NULL, ifd);
- X gopher->connection->close();
- X gopher->gwindow->display();
- X sprintf(buffer, "Total of %d item%s", gopher->length, gopher->length == 1 ? "" : "s");
- X gopher->gwindow->status(buffer);
- X
- X if (gopher->length == 0)
- X {
- X //
- X // Nothing was found. Let the user know...
- X //
- X gopher->gwindow->nothing_found();
- X }
- X }
- X else
- X {
- X if (*buffer == '.' && buffer[1] == '\0')
- X return;
- X p = buffer;
- X while (*p == '-' || *p > 126 || *p < 32)
- X p++;
- X gopher->list.add(new String(p));
- X
- X //
- X // Keep a running count and display the results every second
- X //
- X gopher->length++;
- X if (gopher->length > MAX_LIST_LINES)
- X gopher->gwindow->list_full();
- X
- X if (last < time(NULL))
- X {
- X char str[20];
- X sprintf(str, "%d line%s...", gopher->length, gopher->length == 1 ? "" : "s");
- X gopher->gwindow->status(str);
- X last = time(NULL);
- X }
- X }
- }
- X
- X
- //***************************************************************************
- // void Gopher::read_ascii()
- //
- void Gopher::read_ascii()
- {
- X datatype = TYPE_ASCII;
- X strcpy(filename, "/tmp/gophXXXXXX");
- X fd = mkstemp(filename);
- X length = 0;
- X (void) notify_set_input_func((Notify_client) this, (Notify_func) read_ascii_proc, connection->get_socket());
- }
- X
- X
- //***************************************************************************
- // void Gopher::read_ascii_proc(Gopher *gopher, int ifd)
- //
- void Gopher::read_ascii_proc(Gopher *gopher, int ifd)
- {
- X char buffer[INPUT_BUF_SIZE];
- X static time_t last = 0;
- X
- X if (gopher->connection->read_line(buffer, INPUT_BUF_SIZE) == NULL)
- X {
- X //
- X // End of file reached.
- X //
- X ::close(gopher->fd);
- X (void) notify_set_input_func((Notify_client) gopher, NOTIFY_FUNC_NULL, ifd);
- X gopher->connection->close();
- X gopher->gwindow->display();
- X char str[30];
- X sprintf(str, "Total of %d lines", gopher->length);
- X gopher->gwindow->status(str);
- X }
- X else
- X {
- X if (*buffer == '.' && buffer[1] == '\0')
- X return;
- X write(gopher->fd, buffer, strlen(buffer));
- X write(gopher->fd, "\n", 1);
- X gopher->length++;
- X if (last < time(NULL))
- X {
- X char str[20];
- X sprintf(str, "%d line%s...", gopher->length, gopher->length == 1 ? "" : "s");
- X gopher->gwindow->status(str);
- X last = time(NULL);
- X }
- X }
- }
- X
- X
- //***************************************************************************
- // void Gopher::read_binary()
- //
- void Gopher::read_binary()
- {
- X datatype = TYPE_BINARY;
- X strcpy(filename, "/tmp/gophXXXXXX");
- X fd = mkstemp(filename);
- X length = 0;
- X gwindow->status("Waiting for first data to arrive...");
- X (void) notify_set_input_func((Notify_client) this, (Notify_func) read_binary_proc, connection->get_socket());
- }
- X
- X
- //***************************************************************************
- // void Gopher::read_binary_proc(Gopher *gopher, int ifd)
- //
- void Gopher::read_binary_proc(Gopher *gopher, int ifd)
- {
- X char buffer[INPUT_BUF_SIZE];
- X static time_t last = 0;
- X
- X int n = gopher->connection->read_partial(buffer, INPUT_BUF_SIZE);
- X if (n <= 0)
- X {
- X //
- X // End of file reached.
- X //
- X ::close(gopher->fd);
- X (void) notify_set_input_func((Notify_client) gopher, NOTIFY_FUNC_NULL, ifd);
- X gopher->connection->close();
- X gopher->gwindow->display();
- X sprintf(buffer, "Total of %d bytes", gopher->length);
- X gopher->gwindow->status(buffer);
- X }
- X else
- X {
- X ::write(gopher->fd, buffer, n);
- X gopher->length += n;
- X if (last < time(NULL))
- X {
- X char status[40];
- X sprintf(status, "%d byte%s...", gopher->length, gopher->length == 1 ? "" : "s");
- X gopher->gwindow->status(status);
- X last = time(NULL);
- X }
- X }
- }
- X
- X
- SHAR_EOF
- chmod 0664 Gopher.cc ||
- echo 'restore of Gopher.cc failed'
- Wc_c="`wc -c < 'Gopher.cc'`"
- test 8621 -eq "$Wc_c" ||
- echo 'Gopher.cc: original size 8621, current size' "$Wc_c"
- fi
- # ============= List.cc ==============
- if test -f 'List.cc' -a X"$1" != X"-c"; then
- echo 'x - skipping List.cc (File already exists)'
- else
- echo 'x - extracting List.cc (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'List.cc' &&
- //
- // List.cc
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // Implementation of the List class
- //
- #include "List.h"
- X
- #define NULL ((void *) 0)
- X
- X
- //***************************************************************************
- // List::List()
- //
- List::List()
- {
- X first = last = current = (Object *) 0;
- X size = 0;
- }
- X
- X
- //***************************************************************************
- // List::~List()
- //
- List::~List()
- {
- X if (first)
- X {
- X Object *obj;
- X start_get();
- X while (obj = get_next())
- X {
- X delete obj;
- X }
- X }
- }
- X
- X
- //***************************************************************************
- // void List::add(Object *obj)
- // PURPOSE:
- // Add an object to the list. The adding will be done at the end of the
- // list.
- void List::add(Object *obj)
- {
- X if (!first)
- X {
- X //
- X // The list is empty. Easy! Just put the object in it.
- X //
- X first = last = obj;
- X obj->Next((Object *) 0);
- X obj->Previous((Object *) 0);
- X }
- X else
- X {
- X //
- X // There is something already in the list. Just append it
- X //
- X last->Next(obj);
- X obj->Previous(last);
- X obj->Next((Object *) 0);
- X last = obj;
- X }
- X size++;
- }
- X
- X
- //***************************************************************************
- // void List::start_get()
- // PURPOSE:
- // Prepare the list for itteration. This needs to be called so that
- // get_next() will return the first element of the list
- //
- void List::start_get()
- {
- X current = first;
- }
- X
- X
- //***************************************************************************
- // Object *List::get_next()
- // PURPOSE:
- // Return the next object in the list
- //
- Object *List::get_next()
- {
- X if (current)
- X {
- X Object *temp = current;
- X current = current->Next();
- X return temp;
- X }
- X else
- X return (Object *) 0;
- }
- X
- SHAR_EOF
- chmod 0644 List.cc ||
- echo 'restore of List.cc failed'
- Wc_c="`wc -c < 'List.cc'`"
- test 1821 -eq "$Wc_c" ||
- echo 'List.cc: original size 1821, current size' "$Wc_c"
- fi
- # ============= Preferences.cc ==============
- if test -f 'Preferences.cc' -a X"$1" != X"-c"; then
- echo 'x - skipping Preferences.cc (File already exists)'
- else
- echo 'x - extracting Preferences.cc (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'Preferences.cc' &&
- //
- // Preferences.cc
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // Implementation of the Preferences class
- //
- #include "Preferences.h"
- #include "xvgopher.h"
- #include <stdlib.h>
- #include <fstream.h>
- #include <xview/xview.h>
- #include <xview/defaults.h>
- X
- X
- //***************************************************************************
- // Preferences::Preferences()
- //
- Preferences::Preferences()
- {
- X //
- X // Get the path to the .xvgopher-defaults file in the user's home directory
- X //
- X char *home = getenv("HOME");
- X if (!home)
- X home = ".";
- X char filename[100];
- X sprintf(filename, "%s/.xvgopher-defaults", home);
- X
- X //
- X // Read in any values from it
- X //
- X defaults_load_db(filename);
- X
- X //
- X // Now get the values we are interested in.
- X //
- X remove_children = defaults_get_boolean("xvgopher.removeclients", "XvGopher.RemoveClients", FALSE);
- X popup_bookmarks = defaults_get_boolean("xvgopher.popupbookmarks", "XvGopher.PopupBookmarks", FALSE);
- X mail_filter = strdup(defaults_get_string("xvgopher.mailfilter", "XvGopher.MailFilter", DEFAULT_MAILER));
- X print_filter = strdup(defaults_get_string("xvgopher.printfilter", "XvGopher.PrintFilter", DEFAULT_PRINT_FILTER));
- X play_filter = strdup(defaults_get_string("xvgopher.playfilter", "XvGopher.PlayFilter", DEFAULT_PLAYER));
- X image_filter = strdup(defaults_get_string("xvgopher.imagefilter", "XvGopher.ImageFilter", DEFAULT_IMAGER));
- X telnet_command = strdup(defaults_get_string("xvgopher.telnetcommand", "XvGopher.TelnetCommand", DEFAULT_TELNET));
- }
- X
- X
- //***************************************************************************
- // Preferences::~Preferences()
- //
- Preferences::~Preferences()
- {
- X //
- X // Get the path to the .xvgopher-defaults file in the user's home directory
- X //
- X char *home = getenv("HOME");
- X if (!home)
- X home = ".";
- X char filename[100];
- X sprintf(filename, "%s/.xvgopher-defaults", home);
- X
- X ofstream out(filename);
- X if (out.fail())
- X return;
- X
- X static char *truth[2] = {"False", "True"};
- X
- X //
- X // Write the things we know about to the file
- X //
- X out << "XvGopher.RemoveClients:\t" << truth[remove_children] << "\n";
- X out << "XvGopher.PopupBookmarks:\t" << truth[popup_bookmarks] << "\n";
- X out << "XvGopher.MailFilter:\t" << mail_filter << "\n";
- X out << "XvGopher.PrintFilter:\t" << print_filter << "\n";
- X out << "XvGopher.PlayFilter:\t" << play_filter << "\n";
- X out << "XvGopher.ImageFilter:\t" << image_filter << "\n";
- X out << "XvGopher.TelnetCommand:\t" << telnet_command << "\n";
- X out.close();
- X
- X //
- X // For good measures, we should delete the storage used by the preferences
- X //
- X delete mail_filter;
- X delete print_filter;
- X delete play_filter;
- X delete image_filter;
- X delete telnet_command;
- }
- X
- X
- //***************************************************************************
- // int Preferences::get_remove_children()
- //
- int Preferences::get_remove_children()
- {
- X return remove_children;
- }
- X
- X
- //***************************************************************************
- // void Preferences::set_remove_children(int x)
- //
- void Preferences::set_remove_children(int x)
- {
- X remove_children = x != 0;
- }
- X
- X
- //***************************************************************************
- // int Preferences::get_popup_bookmarks()
- //
- int Preferences::get_popup_bookmarks()
- {
- X return popup_bookmarks;
- }
- X
- X
- //***************************************************************************
- // void Preferences::set_popup_bookmarks(int x)
- //
- void Preferences::set_popup_bookmarks(int x)
- {
- X popup_bookmarks = x != 0;
- }
- X
- X
- //***************************************************************************
- // char *Preferences::get_mail_filter()
- //
- char *Preferences::get_mail_filter()
- {
- X return mail_filter;
- }
- X
- X
- //***************************************************************************
- // void Preferences::set_mail_filter(char *s)
- //
- void Preferences::set_mail_filter(char *s)
- {
- X delete mail_filter;
- X mail_filter = strdup(s);
- }
- X
- X
- //***************************************************************************
- // char *Preferences::get_print_filter()
- //
- char *Preferences::get_print_filter()
- {
- X return print_filter;
- }
- X
- X
- //***************************************************************************
- // void Preferences::set_print_filter(char *s)
- //
- void Preferences::set_print_filter(char *s)
- {
- X delete print_filter;
- X print_filter = strdup(s);
- }
- X
- X
- //***************************************************************************
- // char *Preferences::get_play_filter()
- //
- char *Preferences::get_play_filter()
- {
- X return play_filter;
- }
- X
- X
- //***************************************************************************
- // void Preferences::set_play_filter(char *s)
- //
- void Preferences::set_play_filter(char *s)
- {
- X delete play_filter;
- X play_filter = strdup(s);
- }
- X
- X
- //***************************************************************************
- // char *Preferences::get_image_filter()
- //
- char *Preferences::get_image_filter()
- {
- X return image_filter;
- }
- X
- X
- //***************************************************************************
- // void Preferences::set_image_filter(char *s)
- //
- void Preferences::set_image_filter(char *s)
- {
- X delete image_filter;
- X image_filter = strdup(s);
- }
- X
- X
- //***************************************************************************
- // char *Preferences::get_telnet_command()
- //
- char *Preferences::get_telnet_command()
- {
- X return telnet_command;
- }
- X
- X
- //***************************************************************************
- // void Preferences::set_telnet_command(char *s)
- //
- void Preferences::set_telnet_command(char *s)
- {
- X delete telnet_command;
- X telnet_command = strdup(s);
- }
- X
- X
- SHAR_EOF
- chmod 0664 Preferences.cc ||
- echo 'restore of Preferences.cc failed'
- Wc_c="`wc -c < 'Preferences.cc'`"
- test 5632 -eq "$Wc_c" ||
- echo 'Preferences.cc: original size 5632, current size' "$Wc_c"
- fi
- # ============= Response.cc ==============
- if test -f 'Response.cc' -a X"$1" != X"-c"; then
- echo 'x - skipping Response.cc (File already exists)'
- else
- echo 'x - extracting Response.cc (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'Response.cc' &&
- //
- // Response.cc
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // Implementation of the Response class
- //
- #include "Response.h"
- #include <string.h>
- #include <stdio.h>
- X
- X
- //***************************************************************************
- // Response::Response()
- //
- Response::Response()
- {
- X words[0] = NULL;
- X wordcount = 0;
- }
- X
- X
- //***************************************************************************
- // Response::Response(Response *r)
- //
- Response::Response(Response *r)
- {
- X for (wordcount = 0; wordcount < r->wordcount; wordcount++)
- X words[wordcount] = strdup(r->words[wordcount]);
- X type = r->type;
- }
- X
- X
- //***************************************************************************
- // Response::Response(char *str)
- //
- Response::Response(char *str)
- {
- X words[0] = NULL;
- X wordcount = 0;
- X
- X set(str);
- }
- X
- X
- //***************************************************************************
- // Response::~Response()
- //
- Response::~Response()
- {
- X for (int i = 0; i < wordcount; i++)
- X if (words[i])
- X delete words[i];
- }
- X
- X
- //***************************************************************************
- // int Response::set(char *str)
- //
- int Response::set(char *str)
- {
- X extern char *good_strtok(char *, char *);
- X char *temp = strdup(str);
- X
- X type = *temp;
- X char *token = good_strtok(temp + 1, "\t\r\n");
- X if (!token)
- X {
- X delete temp;
- X return 0;
- X }
- X words[0] = strdup(token);
- X for (wordcount = 1; (token = good_strtok((char *) 0, "\t\r\n")); wordcount++)
- X words[wordcount] = strdup(token);
- X delete temp;
- X return wordcount;
- }
- X
- X
- //***************************************************************************
- // char *Response::get_nth(int n)
- //
- char *Response::get_nth(int n)
- {
- X if (n >= wordcount || n < 0)
- X return (char *) 0;
- X else
- X return words[n];
- }
- X
- X
- //***************************************************************************
- // void Response::set_nth(int n, char *str)
- //
- void Response::set_nth(int n, char *str)
- {
- X if (n >= MAX_WORDS || n < 0)
- X return;
- X else
- X {
- X words[n] = strdup(str);
- X if (n >= wordcount)
- X wordcount = n + 1;
- X }
- }
- X
- X
- //***************************************************************************
- // void Response::set_nth(int n, int x)
- //
- void Response::set_nth(int n, int x)
- {
- X if (n >= MAX_WORDS || n < 0)
- X return;
- X else
- X {
- X char buffer[20];
- X sprintf(buffer, "%d", x);
- X words[n] = strdup(buffer);
- X if (n >= wordcount)
- X wordcount = n + 1;
- X }
- }
- X
- X
- SHAR_EOF
- chmod 0644 Response.cc ||
- echo 'restore of Response.cc failed'
- Wc_c="`wc -c < 'Response.cc'`"
- test 2479 -eq "$Wc_c" ||
- echo 'Response.cc: original size 2479, current size' "$Wc_c"
- fi
- # ============= cursor.cc ==============
- if test -f 'cursor.cc' -a X"$1" != X"-c"; then
- echo 'x - skipping cursor.cc (File already exists)'
- else
- echo 'x - extracting cursor.cc (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'cursor.cc' &&
- //
- // cursor.cc
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This file deals with the different cursors which may be used
- //
- #include <xview/xview.h>
- #include <xview/svrimage.h>
- #include <xview/cursor.h>
- #include <xview/notify.h>
- X
- X
- static Cursor busy_cursor[2];
- static Server_image busy_image[2];
- static Cursor old_cursor;
- static int current_cursor = 0;
- X
- #define BLINK_DELAY 200000
- X
- static unsigned short busy1_bits[] = {
- #include "icons/gopher1"
- };
- X
- static unsigned short busy2_bits[] = {
- #include "icons/gopher2"
- };
- X
- //***************************************************************************
- // void init_cursors()
- //
- static void init_cursors()
- {
- X static int had_init = FALSE;
- X
- X if (had_init)
- X return;
- X
- X had_init = TRUE;
- X
- X busy_image[0] = (Server_image) xv_create(NULL, SERVER_IMAGE,
- X XV_WIDTH, 64,
- X XV_HEIGHT, 64,
- X SERVER_IMAGE_BITS, busy1_bits,
- X NULL);
- X busy_cursor[0] = (Cursor) xv_create(NULL, CURSOR,
- X CURSOR_IMAGE, busy_image[0],
- X CURSOR_XHOT, 32,
- X CURSOR_YHOT, 32,
- X NULL);
- X busy_image[1] = (Server_image) xv_create(NULL, SERVER_IMAGE,
- X XV_WIDTH, 64,
- X XV_HEIGHT, 64,
- X SERVER_IMAGE_BITS, busy2_bits,
- X NULL);
- X busy_cursor[1] = (Cursor) xv_create(NULL, CURSOR,
- X CURSOR_IMAGE, busy_image[1],
- X CURSOR_XHOT, 32,
- X CURSOR_YHOT, 32,
- X NULL);
- }
- X
- X
- //***************************************************************************
- // Server_image get_gopher(int n)
- //
- Server_image get_gopher(int n)
- {
- X return busy_image[n];
- }
- X
- X
- static int isbusy = FALSE;
- X
- //***************************************************************************
- // static Notify_value blink_cursor(Frame frame, int which)
- //
- Notify_value blink_cursor(Frame frame, int which)
- {
- X which = which;
- X
- X current_cursor ^= 1;
- X
- X Xv_opaque sub;
- X int n = 1;
- X while ((sub = (Xv_opaque) xv_get(frame, FRAME_NTH_SUBWINDOW, n)) != NULL)
- X {
- X xv_set(sub,
- X WIN_CURSOR, busy_cursor[current_cursor],
- X NULL);
- X n++;
- X }
- X return (Notify_value) 0;
- }
- X
- X
- //***************************************************************************
- // void frame_busy(Frame frame)
- //
- void frame_busy(Frame frame)
- {
- X notify_dispatch();
- X if (isbusy)
- X return;
- X isbusy = TRUE;
- X init_cursors();
- X old_cursor = (Cursor) xv_get(frame, WIN_CURSOR);
- X xv_set(frame,
- X FRAME_BUSY, TRUE,
- X NULL);
- X
- X //
- X // Now go through all sub windows and change their cursor
- X //
- X Xv_opaque sub;
- X int n = 1;
- X while ((sub = (Xv_opaque) xv_get(frame, FRAME_NTH_SUBWINDOW, n)) != NULL)
- X {
- X xv_set(sub,
- X WIN_CURSOR, busy_cursor[0],
- X NULL);
- X n++;
- X }
- X
- X //
- X // Start the timer to change the cursor icon every once in a while
- X //
- X struct itimerval timer;
- X timer.it_value.tv_usec = BLINK_DELAY;
- X timer.it_value.tv_sec = 0;
- X timer.it_interval.tv_usec = BLINK_DELAY;
- X timer.it_interval.tv_sec = 0;
- X notify_set_itimer_func(frame, (Notify_func) blink_cursor, ITIMER_REAL, &timer, NULL);
- }
- X
- X
- //***************************************************************************
- // void frame_unbusy(Frame frame)
- //
- void frame_unbusy(Frame frame)
- {
- X //
- X // First stop the interval timer which is blinking the cursor
- X //
- X notify_set_itimer_func(frame, NOTIFY_FUNC_NULL, ITIMER_REAL, NULL, NULL);
- X
- X notify_dispatch();
- X if (!isbusy)
- X return;
- X isbusy = FALSE;
- X init_cursors();
- X xv_set(frame,
- X FRAME_BUSY, FALSE,
- X NULL);
- X
- X //
- X // Now go through all sub windows and change their cursor
- X //
- X Xv_opaque sub;
- X int n = 1;
- X while ((sub = (Xv_opaque) xv_get(frame, FRAME_NTH_SUBWINDOW, n)) != NULL)
- X {
- X xv_set(sub,
- X WIN_CURSOR, old_cursor,
- X NULL);
- X n++;
- X }
- }
- X
- X
- SHAR_EOF
- chmod 0644 cursor.cc ||
- echo 'restore of cursor.cc failed'
- Wc_c="`wc -c < 'cursor.cc'`"
- test 3627 -eq "$Wc_c" ||
- echo 'cursor.cc: original size 3627, current size' "$Wc_c"
- fi
- # ============= icons.cc ==============
- if test -f 'icons.cc' -a X"$1" != X"-c"; then
- echo 'x - skipping icons.cc (File already exists)'
- else
- echo 'x - extracting icons.cc (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'icons.cc' &&
- //
- // icons.cc
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This file defines all the glyphs used in the xvgopher program
- //
- #include <xview/xview.h>
- #include <xview/svrimage.h>
- #include "icons.h"
- X
- static unsigned short bin_bits[] = {
- #include "icons/bin"
- };
- static unsigned short cso_bits[] = {
- #include "icons/cso"
- };
- static unsigned short dir_bits[] = {
- #include "icons/dir"
- };
- static unsigned short doc_bits[] = {
- #include "icons/doc"
- };
- static unsigned short dos_bits[] = {
- #include "icons/dos"
- };
- static unsigned short error_bits[] = {
- #include "icons/error"
- };
- static unsigned short idx_bits[] = {
- #include "icons/idx"
- };
- static unsigned short mac_bits[] = {
- #include "icons/mac"
- };
- static unsigned short tel_bits[] = {
- #include "icons/tel"
- };
- static unsigned short unknown_bits[] = {
- #include "icons/unknown"
- };
- static unsigned short uu_bits[] = {
- #include "icons/uu"
- };
- static unsigned short sound_bits[] = {
- #include "icons/sound"
- };
- static unsigned short image_bits[] = {
- #include "icons/image"
- };
- static unsigned short info_bits[] = {
- #include "icons/info"
- };
- static unsigned short info_dragging_bits[] = {
- #include "icons/info_dragging"
- };
- X
- X
- struct
- {
- X unsigned char type;
- X Server_image image;
- X unsigned short *bits;
- } icons[] =
- {
- X {'.', NULL, unknown_bits},
- X {'0', NULL, doc_bits},
- X {'1', NULL, dir_bits},
- X {'2', NULL, cso_bits},
- X {'3', NULL, error_bits},
- X {'4', NULL, mac_bits},
- X {'5', NULL, dos_bits},
- X {'6', NULL, uu_bits},
- X {'7', NULL, idx_bits},
- X {'8', NULL, tel_bits},
- X {'9', NULL, bin_bits},
- X {'s', NULL, sound_bits},
- X {'I', NULL, image_bits},
- X {'g', NULL, image_bits},
- X
- X //
- X // The following are images used by other parts of xvgopher. They are
- X // identified by characters with the high bit set.
- X //
- X {'i' | 0x80, NULL, info_bits},
- X {'d' | 0x80, NULL, info_dragging_bits},
- X {'\0', NULL, NULL}
- };
- X
- X
- //***************************************************************************
- // void icon_init()
- //
- void icon_init()
- {
- X static int had_init = FALSE;
- X if (had_init)
- X return;
- X had_init = TRUE;
- X
- X for (int i = 0; icons[i].type; i++)
- X {
- X icons[i].image = (Server_image) xv_create(NULL, SERVER_IMAGE,
- X XV_WIDTH, 16,
- X XV_HEIGHT, 16,
- X SERVER_IMAGE_BITS, icons[i].bits,
- X NULL);
- X }
- }
- X
- X
- //***************************************************************************
- // Server_image get_image(char type)
- //
- Server_image get_image(char type)
- {
- X icon_init();
- X
- X //
- X // Search through the list of icons to find the right one...
- X //
- X for (int i = 0; icons[i].type; i++)
- X {
- X if (icons[i].type == (unsigned char) type)
- X return icons[i].image;
- X }
- X
- X //
- X // Nothing found. Return the unknown icons
- X //
- X return icons[0].image;
- }
- X
- SHAR_EOF
- chmod 0664 icons.cc ||
- echo 'restore of icons.cc failed'
- Wc_c="`wc -c < 'icons.cc'`"
- test 2754 -eq "$Wc_c" ||
- echo 'icons.cc: original size 2754, current size' "$Wc_c"
- fi
- # ============= main.cc ==============
- if test -f 'main.cc' -a X"$1" != X"-c"; then
- echo 'x - skipping main.cc (File already exists)'
- else
- echo 'x - extracting main.cc (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'main.cc' &&
- //
- // main.cc
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // Main program for xvgopher
- //
- #include "xvgopher.h"
- #include "GWindow.h"
- #include "Preferences.h"
- #include <xview/xview.h>
- X
- X
- Preferences preferences;
- X
- static int error_proc()
- {
- X abort();
- X return XV_OK;
- }
- X
- X
- //***************************************************************************
- // main(int ac, char **av)
- //
- main(int ac, char **av)
- {
- X char *server = GOPHER_SERVER;
- X char *port = "70";
- X
- X xv_init(XV_INIT_ARGC_PTR_ARGV, &ac, av,
- X XV_ERROR_PROC, error_proc,
- X NULL);
- X
- X switch (ac)
- X {
- X case 2: // A machine was specified
- X server = av[1];
- X break;
- X case 3: // A machine and port were specified
- X server = av[1];
- X port = av[2];
- X break;
- X }
- X
- X Response *r = new Response("1");
- X r->set_server(server);
- X r->set_port(port);
- X GWindow *main_window = CreateWindow(r);
- X
- X if (main_window)
- X main_window->main_loop();
- X
- X return 0;
- }
- SHAR_EOF
- chmod 0664 main.cc ||
- echo 'restore of main.cc failed'
- Wc_c="`wc -c < 'main.cc'`"
- test 996 -eq "$Wc_c" ||
- echo 'main.cc: original size 996, current size' "$Wc_c"
- fi
- # ============= Config.h ==============
- if test -f 'Config.h' -a X"$1" != X"-c"; then
- echo 'x - skipping Config.h (File already exists)'
- else
- echo 'x - extracting Config.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'Config.h' &&
- //
- // Config.h
- //
- // This class deals with configuration. All configurable options are kept in this class
- //
- #ifndef _Config_h_
- #define _Config_h_
- X
- #include "List.h"
- X
- X
- class Config
- {
- public:
- X //
- X // Constructor
- X //
- X Config();
- X
- X //
- X // Configuration file access
- X //
- X void read();
- X int write();
- X
- X //
- X // Configuration parameters. These are directly accessible to make it easier.
- X //
- X List bookmarks;
- X String server;
- X int port;
- private:
- };
- X
- #endif _Config_h_
- SHAR_EOF
- chmod 0644 Config.h ||
- echo 'restore of Config.h failed'
- Wc_c="`wc -c < 'Config.h'`"
- test 486 -eq "$Wc_c" ||
- echo 'Config.h: original size 486, current size' "$Wc_c"
- fi
- # ============= Connection.h ==============
- if test -f 'Connection.h' -a X"$1" != X"-c"; then
- echo 'x - skipping Connection.h (File already exists)'
- else
- echo 'x - extracting Connection.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'Connection.h' &&
- //
- // Connection.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class forms a easy to use interface to the berkeley tcp socket library.
- // All the calls are basically the same, but the parameters do not have any
- // stray _addr or _in mixed in...
- //
- X
- #if !defined(_Connection_h_)
- # define _Connection_h_
- X
- #include "xvgopher.h"
- #include <stdlib.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- X
- class Connection
- {
- public:
- X // Constructors & Destructors
- X Connection();
- X Connection(int socket);
- X ~Connection();
- X
- X // (De)initialization
- X int open(int priv = 0);
- X int close();
- X
- X // Port stuff
- X int assign_port(int port = 0);
- X int assign_port(char *service);
- X int get_port();
- X int is_privileged();
- X
- X // Host stuff
- X int assign_server(char *name);
- X int assign_server(dword addr = INADDR_ANY);
- X
- X // Connection establishment
- X int connect();
- X Connection *accept(int priv = 0);
- X Connection *accept_privileged();
- X
- X // Registration things
- X int bind();
- X int listen(int n = 5);
- X
- X // IO
- X int write(char *buffer, int length);
- X int write(char *buffer);
- X int read(char *buffer, int length);
- X char *read_line(char *buffer, int length);
- X int read_partial(char *buffer, int maxlength);
- X int bytes_available();
- X int get_char();
- X
- X // Access to socket number
- X char *socket_as_string();
- X int get_socket();
- X int isopen();
- X
- private:
- X enum
- X {
- X BUFFER_SIZE = 1024,
- X };
- X int sock;
- X struct sockaddr_in server;
- X char buffer[BUFFER_SIZE];
- X int pos, pos_max;
- };
- X
- X
- //*************************************************************************
- // inline int Connection::is_privileged()
- // PURPOSE:
- // Return whether the port is priveleged or not.
- //
- inline int Connection::is_privileged()
- {
- X return server.sin_port < 1023;
- }
- X
- X
- #endif
- SHAR_EOF
- chmod 0644 Connection.h ||
- echo 'restore of Connection.h failed'
- Wc_c="`wc -c < 'Connection.h'`"
- test 1949 -eq "$Wc_c" ||
- echo 'Connection.h: original size 1949, current size' "$Wc_c"
- fi
- # ============= GWAbout.h ==============
- if test -f 'GWAbout.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWAbout.h (File already exists)'
- else
- echo 'x - extracting GWAbout.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWAbout.h' &&
- //
- // GWAbout.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class produces a popup window describing the who, what, and where of
- // xvgopher.
- //
- #ifndef _GWAbout_h_
- #define _GWAbout_h_
- X
- #include "GWindow.h"
- X
- class GWAbout : public GWindow
- {
- public:
- X GWAbout(Frame par);
- X int open(Response *resp);
- private:
- X static void done_proc(Frame);
- X static void dismiss_proc(Panel_item, Event *);
- X static Notify_value panel_events(Xv_window, Event *, Notify_arg, Notify_event_type);
- };
- X
- #endif _GWAbout_h_
- SHAR_EOF
- chmod 0644 GWAbout.h ||
- echo 'restore of GWAbout.h failed'
- Wc_c="`wc -c < 'GWAbout.h'`"
- test 620 -eq "$Wc_c" ||
- echo 'GWAbout.h: original size 620, current size' "$Wc_c"
- fi
- # ============= GWBinary.h ==============
- if test -f 'GWBinary.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWBinary.h (File already exists)'
- else
- echo 'x - extracting GWBinary.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWBinary.h' &&
- //
- // GWBinary.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class deals with the getting and saving of ASCII files from
- // a gopher server.
- //
- #ifndef _GWBinary_h_
- #define _GWBinary_h_
- X
- #include "GWDownload.h"
- X
- class GWBinary : public GWDownload
- {
- public:
- X GWBinary(Frame par);
- };
- X
- #endif _GWBinary_h_
- SHAR_EOF
- chmod 0644 GWBinary.h ||
- echo 'restore of GWBinary.h failed'
- Wc_c="`wc -c < 'GWBinary.h'`"
- test 417 -eq "$Wc_c" ||
- echo 'GWBinary.h: original size 417, current size' "$Wc_c"
- fi
- # ============= GWBookmarks.h ==============
- if test -f 'GWBookmarks.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWBookmarks.h (File already exists)'
- else
- echo 'x - extracting GWBookmarks.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWBookmarks.h' &&
- //
- // GWBookmarks.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class deals with bookmarks and the window that displays them.
- //
- #ifndef _GWBookmarks_h_
- #define _GWBookmarks_h_
- X
- #include "GWList.h"
- X
- class GWBookmarks : public GWList
- {
- public:
- X //
- X // Constructor/Destructor
- X //
- X GWBookmarks(Frame);
- X ~GWBookmarks();
- X
- X //
- X // Window creation
- X //
- X int open(Response *resp);
- X void show();
- X
- X //
- X // Bookmarks access
- X //
- X void add(Response *r);
- X
- protected:
- X void row_deselect(int, Response *);
- X void row_select(int, Response *);
- X
- X void read_bookmarks();
- X void write_bookmarks();
- X
- X static void remove_bookmark_proc(Menu menu, Menu_item mi);
- X static void done_proc(Frame);
- X
- X //
- X // The following are used to perform certain specific tasks when creating windows.
- X // They are split up to make the code more readable and modular
- X //
- X void modify_list_menu();
- X
- X Menu_item bookmark_mi;
- X Menu_item show_info_mi;
- };
- X
- extern GWBookmarks *bookmarks;
- X
- #endif _GWBookmarks_h_
- SHAR_EOF
- chmod 0644 GWBookmarks.h ||
- echo 'restore of GWBookmarks.h failed'
- Wc_c="`wc -c < 'GWBookmarks.h'`"
- test 1124 -eq "$Wc_c" ||
- echo 'GWBookmarks.h: original size 1124, current size' "$Wc_c"
- fi
- # ============= GWDirectory.h ==============
- if test -f 'GWDirectory.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWDirectory.h (File already exists)'
- else
- echo 'x - extracting GWDirectory.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWDirectory.h' &&
- //
- // GWDirectory.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class deals with the getting and saving of ASCII files from
- // a gopher server.
- //
- #ifndef _GWDirectory_h_
- #define _GWDirectory_h_
- X
- #include "GWList.h"
- X
- class GWDirectory : public GWList
- {
- public:
- X GWDirectory(Frame par);
- X int open(Response *resp);
- X void display();
- X
- protected:
- X //
- X // Callbacks for the XView interface
- X //
- #if USE_SAVE
- X static void save_notify(Panel_item item, Event *);
- #endif USE_SAVE
- X static void menu_proc(Menu menu, Menu_item mi);
- X
- X //
- X // The next two callbacks are for the menu attached to the scrolling list
- X //
- X static void set_bookmark_proc(Menu menu, Menu_item mi);
- X
- X void row_deselect(int, Response *);
- X void row_select(int, Response *);
- X
- X //
- X // Various window thingies that we need to keep track of
- X //
- X Menu_item bookmark_mi;
- X Menu_item show_info_mi;
- X
- X //
- X // The following are used to perform certain specific tasks when creating windows.
- X // They are split up to make the code more readable and modular
- X //
- X void modify_list_menu();
- };
- X
- #endif _GWDirectory_h_
- SHAR_EOF
- chmod 0664 GWDirectory.h ||
- echo 'restore of GWDirectory.h failed'
- Wc_c="`wc -c < 'GWDirectory.h'`"
- test 1210 -eq "$Wc_c" ||
- echo 'GWDirectory.h: original size 1210, current size' "$Wc_c"
- fi
- # ============= GWDownload.h ==============
- if test -f 'GWDownload.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWDownload.h (File already exists)'
- else
- echo 'x - extracting GWDownload.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWDownload.h' &&
- //
- // GWDownload.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class deals with the getting and saving of ASCII files from
- // a gopher server.
- //
- #ifndef _GWDownload_h_
- #define _GWDownload_h_
- X
- #include "GWindow.h"
- X
- class GWDownload : public GWindow
- {
- public:
- X GWDownload(Frame par, int type, char *btn, char *btncmd);
- X GWDownload(Frame par, int type);
- X int open(Response *resp);
- X void display();
- X enum
- X {
- X BINARY,
- X ASCII,
- X };
- protected:
- X static void bin_save_notify(Panel_item, Event *);
- X static void bin_cancel_notify(Panel_item, Event *);
- X static void bin_other_notify(Panel_item, Event *);
- X static Panel_setting bin_text_notify(Panel_item, Event *);
- private:
- X int type;
- X char *button; // Label of the optional button
- X char *button_command; // Command to execute when button pressed
- };
- X
- #endif _GWDownload_h_
- SHAR_EOF
- chmod 0644 GWDownload.h ||
- echo 'restore of GWDownload.h failed'
- Wc_c="`wc -c < 'GWDownload.h'`"
- test 966 -eq "$Wc_c" ||
- echo 'GWDownload.h: original size 966, current size' "$Wc_c"
- fi
- # ============= GWFile.h ==============
- if test -f 'GWFile.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWFile.h (File already exists)'
- else
- echo 'x - extracting GWFile.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWFile.h' &&
- //
- // GWFile.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class deals with the getting and saving of ASCII files from
- // a gopher server.
- //
- #ifndef _GWFile_h_
- #define _GWFile_h_
- X
- #include "GWindow.h"
- X
- class GWFile : public GWindow
- {
- public:
- X GWFile(Frame par);
- X int open(Response *resp);
- X void display();
- private:
- X Textsw textsw;
- };
- X
- #endif _GWFile_h_
- SHAR_EOF
- chmod 0644 GWFile.h ||
- echo 'restore of GWFile.h failed'
- Wc_c="`wc -c < 'GWFile.h'`"
- test 481 -eq "$Wc_c" ||
- echo 'GWFile.h: original size 481, current size' "$Wc_c"
- fi
- # ============= GWGopher.h ==============
- if test -f 'GWGopher.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWGopher.h (File already exists)'
- else
- echo 'x - extracting GWGopher.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWGopher.h' &&
- //
- // GWGopher.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class creates a popup window which asks for details about a new gopher
- // server. After this is information is supplied, it will start a new
- // main frame for that gopher server.
- //
- #ifndef _GWGopher_h_
- #define _GWGopher_h_
- X
- #include "GWindow.h"
- X
- class GWGopher : public GWindow
- {
- public:
- X GWGopher(Frame par);
- X int open(Response *resp);
- private:
- X static void start_proc(Panel_item, Event *);
- X
- X Panel_item server;
- X Panel_item port;
- };
- X
- #endif _GWGopher_h_
- SHAR_EOF
- chmod 0664 GWGopher.h ||
- echo 'restore of GWGopher.h failed'
- Wc_c="`wc -c < 'GWGopher.h'`"
- test 646 -eq "$Wc_c" ||
- echo 'GWGopher.h: original size 646, current size' "$Wc_c"
- fi
- # ============= GWImage.h ==============
- if test -f 'GWImage.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWImage.h (File already exists)'
- else
- echo 'x - extracting GWImage.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWImage.h' &&
- //
- // GWImage.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class deals with the getting and saving of ASCII files from
- // a gopher server.
- //
- #ifndef _GWImage_h_
- #define _GWImage_h_
- X
- #include "GWDownload.h"
- X
- class GWImage : public GWDownload
- {
- public:
- X GWImage(Frame par);
- };
- X
- #endif _GWImage_h_
- SHAR_EOF
- chmod 0644 GWImage.h ||
- echo 'restore of GWImage.h failed'
- Wc_c="`wc -c < 'GWImage.h'`"
- test 411 -eq "$Wc_c" ||
- echo 'GWImage.h: original size 411, current size' "$Wc_c"
- fi
- # ============= GWIndex.h ==============
- if test -f 'GWIndex.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWIndex.h (File already exists)'
- else
- echo 'x - extracting GWIndex.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWIndex.h' &&
- //
- // GWIndex.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class deals with the getting and saving of ASCII files from
- // a gopher server.
- //
- #ifndef _GWIndex_h_
- #define _GWIndex_h_
- X
- #include "GWindow.h"
- X
- class GWIndex : public GWindow
- {
- public:
- X GWIndex(Frame par);
- X int open(Response *resp);
- private:
- X static Panel_setting index_notify(Panel_item, Event *);
- };
- X
- #endif _GWIndex_h_
- SHAR_EOF
- chmod 0644 GWIndex.h ||
- echo 'restore of GWIndex.h failed'
- Wc_c="`wc -c < 'GWIndex.h'`"
- test 503 -eq "$Wc_c" ||
- echo 'GWIndex.h: original size 503, current size' "$Wc_c"
- fi
- # ============= GWInfo.h ==============
- if test -f 'GWInfo.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWInfo.h (File already exists)'
- else
- echo 'x - extracting GWInfo.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWInfo.h' &&
- //
- // GWInfo.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class defines a window which shows information about an item.
- // The only things which is passed to this window is a Response. Everything can
- // be deduced from there.
- //
- #ifndef _GWInfo_h_
- #define _GWInfo_h_
- X
- #include "xvgopher.h"
- #include "GWindow.h"
- #include "Response.h"
- X
- class GWInfo : public GWindow
- {
- public:
- X GWInfo(Frame par);
- X int open(Response *);
- private:
- };
- X
- #endif _GWInfo_h_
- SHAR_EOF
- chmod 0644 GWInfo.h ||
- echo 'restore of GWInfo.h failed'
- Wc_c="`wc -c < 'GWInfo.h'`"
- test 569 -eq "$Wc_c" ||
- echo 'GWInfo.h: original size 569, current size' "$Wc_c"
- fi
- # ============= GWList.h ==============
- if test -f 'GWList.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWList.h (File already exists)'
- else
- echo 'x - extracting GWList.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWList.h' &&
- //
- // GWList.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class is a base class for any window which displays a list of gopher items.
- //
- #ifndef _GWList_h_
- #define _GWList_h_
- X
- #include "GWindow.h"
- #include "cursor.h"
- #include "icons.h"
- X
- class GWList : public GWindow
- {
- public:
- X //
- X // Constructor
- X //
- X GWList();
- X
- X //
- X // Window creation
- X //
- X int open(Response *resp);
- X
- protected:
- X //
- X // Data members needed to keep track of the windowing stuff
- X //
- X Panel_item dir_list;
- X int current_selected;
- X
- X //
- X // Callback routines from XView.
- X //
- X static void frame_event(Xv_Window, Event *, Notify_arg);
- X static void list_notify(Panel_item, char *, caddr_t, Panel_list_op, Event *, int);
- X static void show_item_info_proc(Menu menu, Menu_item mi);
- X
- X //
- X // Members which are supposed to be overridden.
- X //
- X virtual void row_deselect(int, Response *);
- X virtual void row_select(int, Response *);
- X
- X //
- X // Utility routines
- X //
- X void assign_icon(Frame);
- };
- X
- #endif _GWList_h_
- SHAR_EOF
- chmod 0664 GWList.h ||
- echo 'restore of GWList.h failed'
- Wc_c="`wc -c < 'GWList.h'`"
- test 1107 -eq "$Wc_c" ||
- echo 'GWList.h: original size 1107, current size' "$Wc_c"
- fi
- # ============= GWPref.h ==============
- if test -f 'GWPref.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWPref.h (File already exists)'
- else
- echo 'x - extracting GWPref.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWPref.h' &&
- //
- // GWPref.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class deals with the interface between the preferences and the window which allows
- // the preferences to be changed.
- //
- #ifndef _GWPref_h_
- #define _GWPref_h_
- X
- #include "GWindow.h"
- X
- class GWPref : public GWindow
- {
- public:
- X //
- X // Constructor
- X //
- X GWPref(Frame);
- X ~GWPref();
- X int open(Response *);
- X void show();
- private:
- X //
- X // Remember where items are so we can reference them!
- X //
- X Panel_item choices;
- X Panel_item play;
- X Panel_item image;
- X Panel_item print;
- X Panel_item mail;
- X Panel_item telnet;
- X
- X //
- X // Call back routines
- X //
- X static void done_proc(Frame);
- X static void apply(Panel_item, Event *);
- };
- X
- X
- extern GWPref *gwpref;
- X
- #endif _GWPref_h_
- SHAR_EOF
- chmod 0644 GWPref.h ||
- echo 'restore of GWPref.h failed'
- Wc_c="`wc -c < 'GWPref.h'`"
- test 860 -eq "$Wc_c" ||
- echo 'GWPref.h: original size 860, current size' "$Wc_c"
- fi
- # ============= GWSound.h ==============
- if test -f 'GWSound.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWSound.h (File already exists)'
- else
- echo 'x - extracting GWSound.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWSound.h' &&
- //
- // GWSound.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class deals with the getting and saving of ASCII files from
- // a gopher server.
- //
- #ifndef _GWSound_h_
- #define _GWSound_h_
- X
- #include "GWDownload.h"
- X
- class GWSound : public GWDownload
- {
- public:
- X GWSound(Frame par);
- };
- X
- #endif _GWSound_h_
- SHAR_EOF
- chmod 0644 GWSound.h ||
- echo 'restore of GWSound.h failed'
- Wc_c="`wc -c < 'GWSound.h'`"
- test 411 -eq "$Wc_c" ||
- echo 'GWSound.h: original size 411, current size' "$Wc_c"
- fi
- # ============= GWTelnet.h ==============
- if test -f 'GWTelnet.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWTelnet.h (File already exists)'
- else
- echo 'x - extracting GWTelnet.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWTelnet.h' &&
- //
- // GWTelnet.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class deals with the getting and saving of ASCII files from
- // a gopher server.
- //
- #ifndef _GWTelnet_h_
- #define _GWTelnet_h_
- X
- #include "GWindow.h"
- X
- class GWTelnet : public GWindow
- {
- public:
- X GWTelnet(Frame par);
- X virtual int open(Response *resp);
- private:
- };
- X
- #endif _GWTelnet_h_
- SHAR_EOF
- chmod 0644 GWTelnet.h ||
- echo 'restore of GWTelnet.h failed'
- Wc_c="`wc -c < 'GWTelnet.h'`"
- test 458 -eq "$Wc_c" ||
- echo 'GWTelnet.h: original size 458, current size' "$Wc_c"
- fi
- # ============= GWindow.h ==============
- if test -f 'GWindow.h' -a X"$1" != X"-c"; then
- echo 'x - skipping GWindow.h (File already exists)'
- else
- echo 'x - extracting GWindow.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'GWindow.h' &&
- //
- // GWindow.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // The Window class does everything that needs to be done concerning
- // gopher and XView.
- //
- #ifndef _GWindow_h_
- #define _GWindow_h_
- X
- #include "Gopher.h"
- #include "Response.h"
- #include <xview/xview.h>
- #include <xview/frame.h>
- #include <xview/panel.h>
- #include <xview/textsw.h>
- X
- #define WINDOW_WIDTH 536
- #define WINDOW_HEIGHT 332
- X
- class GWindow
- {
- public:
- X //
- X // Constructors/Destructors
- X //
- X GWindow();
- X ~GWindow();
- X
- X //
- X // Different ways of opening new windows
- X //
- X friend GWindow *CreateWindow(Response *resp, Frame parent = NULL);
- X virtual int open(Response *resp);
- X
- X //
- X // These are callbacks which are to notify us of finished business.
- X //
- X
- X //
- X // The program's main loop is actuall in this class
- X //
- X void main_loop();
- X
- X virtual void display();
- X void status(char *str);
- X
- X //
- X // Some notifications
- X //
- X void nothing_found();
- X void list_full();
- X
- protected:
- X //
- X // We need to remember things about the windows:
- X //
- X Frame frame;
- X Panel panel;
- X Frame parent;
- X
- X //
- X // The following two variables are used to keep track of window locations.
- X // They are static since all instances of this class need to have access to the
- X // same variables.
- X //
- X static int next_x;
- X static int next_y;
- X
- X //
- X // Internal routines used for the windowing system
- X //
- X Gopher *gopher;
- X
- X //
- X // The complete gopher information used to create this window
- X //
- X Response *info;
- X
- X //
- X // Routine to determine the next window location
- X //
- X void compute_location(int width, int height);
- X
- X //
- X // Callback for windows
- X //
- X static void done_proc(Frame frame);
- X static void quit_proc(Frame frame, Event *event);
- X
- X //
- X // The quit/dismiss button that every window has...
- X //
- X Panel_item dir_quit;
- };
- X
- #endif _GWindow_h_
- X
- SHAR_EOF
- chmod 0664 GWindow.h ||
- echo 'restore of GWindow.h failed'
- Wc_c="`wc -c < 'GWindow.h'`"
- test 1931 -eq "$Wc_c" ||
- echo 'GWindow.h: original size 1931, current size' "$Wc_c"
- fi
- # ============= Gopher.h ==============
- if test -f 'Gopher.h' -a X"$1" != X"-c"; then
- echo 'x - skipping Gopher.h (File already exists)'
- else
- echo 'x - extracting Gopher.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'Gopher.h' &&
- //
- // Gopher.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class implements an interface to a gopher server
- //
- #ifndef _Gopher_h_
- #define _Gopher_h_
- X
- #include "List.h"
- X
- //
- // The following defines are used to determine what kind of data the
- // server is providing
- //
- X
- class Gopher
- {
- public:
- X //
- X // Constructors/Destructor
- X //
- X Gopher(class GWindow *gwin);
- X Gopher(char *server, int port, class GWindow *gwin);
- X ~Gopher();
- X
- X int open(char *server, int port);
- X
- X //
- X // Data retrieval
- X //
- X int read(char type, char *str);
- X void start_get();
- X char *get_next();
- X void read_list();
- X void read_ascii();
- X void read_binary();
- X
- X //
- X // Data types can be of several types. The data types determine
- X // where the actual data is kept.
- X //
- X typedef enum
- X {
- X TYPE_LIST,
- X TYPE_ASCII,
- X TYPE_BINARY,
- X TYPE_SOUND,
- X TYPE_IMAGE,
- X } DataType;
- X
- X //
- X // To let others know what kind of data we are looking at we
- X // have the following variable:
- X //
- X DataType datatype;
- X
- X char filename[100];
- X
- private:
- X class Connection *connection; // Connection with gopher server
- X class GWindow *gwindow; // The window that belongs to us
- X
- X List list;
- X int fd;
- X int length; // To keep track of file size
- X
- X //
- X // Callback routines. (They need to be static!!!)
- X //
- X static void read_list_proc(Gopher *gopher, int fd);
- X static void read_ascii_proc(Gopher *gopher, int fd);
- X static void read_binary_proc(Gopher *gopher, int fd);
- };
- X
- #endif _Gopher_h_
- SHAR_EOF
- chmod 0644 Gopher.h ||
- echo 'restore of Gopher.h failed'
- Wc_c="`wc -c < 'Gopher.h'`"
- test 1608 -eq "$Wc_c" ||
- echo 'Gopher.h: original size 1608, current size' "$Wc_c"
- fi
- # ============= List.h ==============
- if test -f 'List.h' -a X"$1" != X"-c"; then
- echo 'x - skipping List.h (File already exists)'
- else
- echo 'x - extracting List.h (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'List.h' &&
- //
- // List.h
- //
- // (c) Copyright 1993, San Diego State University -- College of Sciences
- // (See the COPYRIGHT file for more Copyright information)
- //
- // This class implements a linked list of objects. It itself is also an
- // object
- //
- #ifndef _List_h_
- #define _List_h_
- X
- #include "Object.h"
- X
- class List : public Object
- {
- public:
- X //
- X // Constructors/Destructor
- X //
- X List();
- // List(List &list);
- X virtual ~List();
- X
- X //
- X // List access
- X //
- X void add(Object *obj);
- X void detach(Object *obj);
- X
- X //
- X // List traversal
- X //
- X void start_get();
- X Object *get_next();
- X
- protected:
- X //
- X // These variables are to keep track of the linked list
- X //
- X Object *first;
- X Object *last;
- X Object *current;
- X
- X int size;
- };
- X
- #endif _List_h_
- SHAR_EOF
- chmod 0644 List.h ||
- echo 'restore of List.h failed'
- Wc_c="`wc -c < 'List.h'`"
- test 771 -eq "$Wc_c" ||
- echo 'List.h: original size 771, current size' "$Wc_c"
- fi
- true || echo 'restore of Object.h failed'
- echo End of part 3, continue with part 4
- exit 0
-